import jwt
import datetime
from django.http import JsonResponse

from django_no_drf.settings import SECRET_KEY


# 创建jwt令牌
def create_jwt(username: str) -> str:
    # 设置JWT的过期时间，这里设置为1小时后
    expiration_time = datetime.datetime.now() + datetime.timedelta(days=2)

    # 构建JWT的负载（payload）
    payload = {
        'sub': username,  # 主题，通常是用户ID
        'exp': expiration_time - datetime.timedelta(hours=8),  # 过期时间
        'iat': datetime.datetime.now() - datetime.timedelta(hours=8),  # 签发时间
        'iss': 'django_server'  # 签发者，通常是应用名称
    }

    return jwt.encode(payload, SECRET_KEY, algorithm='HS256')


# 装饰器，认证jwt
def jwt_required(view_func):
    def wrapper(request, *args, **kwargs):
        try:
            auth_header = request.META.get('HTTP_AUTHORIZATION')
            token = auth_header.split(' ')[1]
            decoded_token = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
            # 在这里可以根据需要对decoded_token进行进一步的处理
            # 例如，将用户信息存储在request对象中，以便在视图函数中使用
            # request.user = decoded_token['user']
        except Exception as e:
            print(e)
            return JsonResponse({"code": 401, "msg": "Authorization认证失败"}, status=401)

        return view_func(request, *args, **kwargs)

    return wrapper
